Appearance
导论:下山之艺 —— 优化器的本质
如果说损失函数
优化器的核心任务不是简单的“求导”,而是利用梯度信息
优化器的演进史,是一部从“盲目跟随梯度”(SGD)到“自适应地形曲率”(Adam),再到“兼顾泛化性能与平坦极小值”(SAM/SWATS)的探索史。理解优化器,就是理解如何将生硬的梯度下降转化为精准的智能导航。
第一部分:基石算法 —— 梯度下降的三种形态
1.1 批量梯度下降(Batch Gradient Descent, BGD)
使用全部训练样本计算损失梯度:
致命缺陷:每步需遍历全部数据,当
1.2 随机梯度下降(Stochastic Gradient Descent, SGD)
每次迭代仅使用一个随机样本计算梯度:
优势:梯度中包含大量噪声,这种噪声恰恰能帮助模型逃离尖锐的局部极小值和鞍点。 劣势:方差极大,损失曲线剧烈震荡,收敛后精度较低。
1.3 小批量随机梯度下降(Mini-batch SGD)—— 现代工业标准
每次迭代使用一个固定大小的 Batch(如 256 或 4096):
Mini-batch 完美利用了 GPU 的矩阵并行算力,在梯度估计的方差和计算效率之间取得了最佳平衡。几乎所有的深度学习优化器都是在此基础上的变体。
第二部分:动量法 —— 利用惯性穿越峡谷
SGD 在狭长的“峡谷”(一个方向曲率极大,另一个方向曲率极小)地形中会表现出离谱的锯齿状震荡,收敛极慢。
2.1 标准动量(Momentum, Polyak, 1964)
引入一个速度向量(Velocity)
其中
2.2 Nesterov 加速梯度(NAG, Nesterov, 1983)
NAG 是一个前瞻性的动量法。它在当前速度基础上“瞄一眼”未来的位置,再计算梯度:
几何意义:NAG 在到达陡坡底部之前就提前减速,防止动量冲过头(越过最优点)。在凸优化中,NAG 具有比标准动量更好的收敛界(Regret Bound)。
第三部分:自适应学习率 —— 为每个参数定制步长
SGD 给所有参数分配相同的全局学习率
3.1 AdaGrad(Duchi et al., 2011)—— 稀疏数据的王者
AdaGrad 对每个参数
优势:频繁出现的特征(如常见词)累积梯度平方大,学习率自动变小;稀疏特征累积小,学习率相对变大,非常适合处理稀疏数据(如 NLP 词袋模型)。 致命缺陷:
3.2 RMSProp(Hinton, 2012)—— 引入指数衰减救场
RMSProp 使用指数移动平均(EMA) 替代 AdaGrad 的粗暴累加,解决“学习率骤死”问题:
3.3 Adam(Kingma & Ba, 2015)—— 动量 + RMSProp 的完美联姻
Adam(Adaptive Moment Estimation)融合了动量的一阶矩(均值)和 RMSProp 的二阶矩(方差),并引入了**偏差修正(Bias Correction)**机制,是目前最流行、最鲁棒的通用优化器。
更新公式:
由于
最终更新:
超参数推荐:
第四部分:AdamW —— 解耦权重衰减(Decoupled Weight Decay)
这是现代大模型(如 GPT、LLaMA)训练中最关键的一次修正。
在经典 SGD 中,
AdamW(Loshchilov & Hutter, 2017) 强制将权重衰减与损失函数的梯度计算解耦:
即无论自适应学习率如何变化,权重衰减都独立且固定地作用于参数本身。这一改动微乎其微,却奇迹般地极大提升了 Transformer 的泛化能力。现在所有主流大模型预训练,默认使用 AdamW。
第五部分:泛化之谜 —— SGD 为何比 Adam 更“能打”
令人困惑的是,在图像分类(如 ImageNet)等任务上,使用 SGD + Momentum(带适当学习率退火)往往比 Adam 取得更高的测试准确率。
尖锐 vs 平坦极小值(Sharp vs Flat Minima):
- Adam 因其自适应缩放特性,倾向于寻找损失地形中“尖锐”的极小值(因为在大梯度方向上步长被压缩),这种极小值在测试集分布轻微偏移时极易崩盘(泛化差)。
- SGD 更新中的固有噪声使其倾向于“漫游”到地形中更“平坦”(Flat)的盆地。平坦盆地的 Hessian 特征值较小,对参数扰动不敏感,因此泛化性强。
工程对策:
- SWATS(Switching Adam to SGD):训练前期用 Adam 快速收敛,后期切换为 SGD 精调。
- SAM(Sharpness-Aware Minimization):不是寻找最低的损失点,而是寻找损失值低且邻域平坦的点(最小化邻域内的最大损失)。
第六部分:现代大模型专用优化器 —— LAMB & LARS
当 Batch Size 增大到 8192、16384 甚至 1M 时,梯度噪声急剧降低,AdamW 的更新会出现“塌缩”现象。
- LARS(Layer-wise Adaptive Rate Scaling):针对每一层独立计算学习率缩放系数,使超大 Batch 训练成为可能(如谷歌在 ImageNet 上 Batch=64K)。
- LAMB(Layer-wise Adaptive Moments optimizer for Batching):目前训练 BERT 和 GPT 的大规模分布式集群(如 TPU Pod)的绝对主力。它结合了 Adam 的自适应矩估计和 LARS 的分层自适应缩放,使得在大 Batch(> 64K)下依然保持与 Baseline 相同的精度。
第七部分:学习率调度器(Scheduler)—— 优化器的“变速箱”
优化器负责“踩油门”,调度器负责“换挡”。没有合适的学习率衰减策略,模型将永远在最优解附近震荡而无法收敛。
- 阶梯式衰减(Step Decay):每隔固定 epoch,
乘以 0.1。 - 余弦退火(Cosine Annealing):
。平滑衰减,在 Transformer 训练中效果优于阶梯衰减。 - 预热(Warmup):训练初期(如前 2% 步数),
从 0 线性增加到目标最大值。原因:初始时 Adam/AdamW 的方差估计 极不准确,预热防止早期步长过大导致梯度爆炸。这是大模型训练必须的启动步骤。
第八部分:梯度裁剪(Gradient Clipping)—— 防止爆炸的保险丝
当梯度范数超过阈值
这是处理 RNN 梯度爆炸的传统手段,在现代大模型中,它仍是训练稳定性(防止 Loss Spike)的最后一道物理防线。
结语:优化器的选择哲学
| 场景 | 推荐优化器 | 理由 |
|---|---|---|
| CV / ImageNet 分类 | SGD + Momentum | 泛化性最强,能找到更平坦的极小值。 |
| NLP / Transformer 预训练 | AdamW | 极其稳健,对超参数不敏感,配合 Warmup。 |
| 超大 Batch 分布式训练 | LAMB / LARS | 在 Batch Size > 8192 时保持精度不崩。 |
| 稀疏数据 / 推荐系统 | AdaGrad / Adam | 能自适应调整稀有特征的学习率。 |
| RL / 策略梯度 | Adam | 处理极噪的梯度信号表现优异。 |
优化器从来不是孤立的技术,而是与模型架构、数据规模和算力预算紧密耦合的底层系统。在千亿参数的轰鸣中,AdamW 凭借其简单稳定的数学形式,成为了工业界的“万用底座”;但追求极致泛化的人工智能研究者,至今仍在 SGD 与自适应方法之间寻找微妙的平衡。
归根结底,所有优化器都是在回答同一个核心问题:“面对未知、高维且充满噪声的损失地形,我们该如何尽可能稳健地迈出下一步?” 这个问题的答案,将随着模型规模的不断膨胀,持续演进。